perm filename HIER1[W84,JMC] blob sn#744240 filedate 1984-02-24 generic text, type T, neo UTF8
ordinarily(thing,not-fly).
ordinarily(penguin,not-fly).
ordinarily(bird,fly).

mem(joe,adelie).
mem(tweety,canary).

ground←is←a(animal,thing).
ground←is←a(rock,thing).
ground←is←a(bird,animal).
ground←is←a(penguin,bird).
ground←is←a(canary,bird).
ground←is←a(adelie,penguin).


ordinarily(C,not-(not-P)) :-
	ordinarily(C,P).

ab←aspect1(C,Class,P) :-
	(
		is←a(Class,C1) ;
		Class = C1
	),
	ordinarily(C1,not-P),
	is←a(C1,C).

ordinarily(Class,P) :-
	is←a(Class,C),
	ordinarily(C,P),
	\+ ab←aspect1(C,Class,P).

ap(P,X) :-
	mem(X,C),
	ordinarily(C,P),
	\+ ab←aspect3(X,C,P).

mem(X,C1) :-
	is←a(C1,C),
	mem(X,C).

ab←aspect3(X,C,P) :-
	mem(X,C1),
	is←a(C,C1),
	ordinarily(C1,not-P).


% bottom level
is←a(X, Y) :-	ground←is←a(X, Y).

% forward
is←a(X, Y) :-
	\+ var(X),
	ground←is←a(X, Z),
	is←a(Z, Y).

% backward
is←a(X, Y) :-
	\+ var(Y),
	ground←is←a(Z, Y),
	is←a(X, Z).

% both
is←a(X, Y) :-
	var(X),
	var(Y),
	ground←is←a(X, Z),
	is←a(Z, Y).

% neither
is←a(X, Y) :-
	\+ var(X),
	\+ var(Y),
	\+ ground←is←a(X, Y),
	ground←is←a(X, Z),
	is←a(Z, Y).